import axios from 'axios';
import router from '../router/index.js';
// 导入userStore，用于清除用户状态
import { userStore } from '../store/UserStore.js';

export const _axios = axios.create({
    baseURL: import.meta.env.VITE_BASE_URL,
    timeout: 800000,
    withCredentials: true,
});

// 请求拦截器：从localStorage获取token（与store统一）
_axios.interceptors.request.use(function (config) {
    console.log('请求拦截器:', config);
    const token = localStorage.getItem('jwt');
    if (token) {
        config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
});

// 响应拦截器：错误处理时衔接store
_axios.interceptors.response.use(

    function (response) {
        console.log('响应拦截器:', response);
        if (response.status === 200) {
            const res = response.data;
            if (res.code === "0") {
                return res.data; // 正常返回,// 关键：返回后端的 data 字段（{jwt, user}），而非完整的 res
            } else {
                // 当code!==0时（如token过期），清除用户状态并跳转登录
                const store = userStore();
                // store.clearUser(); // 调用store的清除方法
                // router.push('/login');
                // 新增：返回拒绝状态，让请求进入catch
                return Promise.reject(response.data.msg || '操作失败');
            }
        }
        return Promise.reject(response);
    },
    function (error) {
        const store = userStore();
        switch(error.response?.status) {
            case 401:
                // 401未授权时，清除用户状态
                store.clearUser();
                router.push('/login');
                alert("登录已过期，请重新登录");
                break;
            case 404: alert("服务器连接不上，请检查网址或请稍后再试"); break;
            case 405: alert("请求方式不对,请与开发公司联系"); break;
            case 500: alert("服务器端错误"); break;
            default: alert(`请求错误: ${error.message}`); break;
        }
        return Promise.reject(error);
    }
);

export default _axios;
